﻿#ifndef PULICLOG_H
#define PULICLOG_H

#include <QString>
#include <QVariant>

#define def_FL QString("%1--%2").arg(__FILE__).arg(__LINE__)

/***********************************************
* [className]   CLogBase
* [func]        日志基类
* [author]      jhb
* [date]        2023-12-06 13:21
* [Modification Log]
* Version               By              Notes
* v0.0.1                jhb             初次建立
************************************************/
class CLogBase
{
public:
    //日志等级枚举
    enum enumLogLevel
    {
        enLevelRun = 1,           //运行
        enLevelInfo = 2,          //正常
        enLevelAlarm = 3,         //报警
        enLevelError = 4,         //错误
        enLevelHardWare = 5,      //硬件故障
    };

    /***************************************************************
    * @datatime 2024-07-22 16:42
    * @author   jhb
    * @brief    注册日志tab页
    * @input    const QString &sTabName     tab页名称
    * @output   无
    * @return   -1：失败
    *           0：重复
    *           其它：成功（tab页序号）
    * @note
    ****************************************************************/
    virtual int addTab(const QString &sTabName) = 0;

    /***************************************************************
    * @datatime 2024-07-23 16:16
    * @author   jhb
    * @brief    删除日志tab页
    * @input    const QString &sTabName     tab页名称
    * @output   无
    * @return   0：成功
    *           其它：失败
    * @note
    ****************************************************************/
    virtual int removeTab(const QString &sTabName) = 0;

    /***************************************************************
    * @datatime 2024-03-06 13:21:33
    * @author   jhb
    * @brief    写日志
    * @input    const QString &sModule      模块类型
    *           const QString &sLogText     日志信息
    *           int eType                   日志类型
    *           const QString &sFl          文件名、行数
    *           const int &nTab             归属的Tab页索引（从0开始）
    * @output   无
    * @return   无
    * @note     用于封装好的组件内部调用
    ****************************************************************/
    virtual void writeLog(const QString &sModule, const QString &sLogText, const int &nType = enLevelInfo,
                          const QString &fl = def_FL, const int &nTab = 0) = 0;
};

//日志信息（用于数据传输）
class CLogMgrInfo
{
public:
    CLogBase *m_pLog;
};
Q_DECLARE_METATYPE(CLogMgrInfo)

#endif // PULICLOG_H
